const { http } = require('./http.js');

/**
 * 用户信息服务
 */
class UserService {
  constructor() {
    this.userCache = new Map(); // 用户信息缓存
  }

  /**
   * 根据用户ID获取用户详细信息
   * @param {string|number} userId 用户ID
   * @returns {Promise<Object>} 用户信息
   */
  async getUserInfo(userId) {
    if (!userId) {
      return null;
    }

    // 检查缓存
    if (this.userCache.has(userId)) {
      return this.userCache.get(userId);
    }

    try {
      const res = await http.get(`/system/user/${userId}`);
      
      if (res && res.data) {
        const userInfo = {
          userId: userId,
          nickname: res.data.nickname || res.data.nickName || res.data.name || '考友',
          username: res.data.username || res.data.userName || '',
          realName: res.data.realName || res.data.real_name || '',
          avatar: res.data.avatar || res.data.avatarUrl || ''
        };
        
        // 缓存用户信息
        this.userCache.set(userId, userInfo);
        
        return userInfo;
      }
      
      return null;
    } catch (error) {
      console.error('获取用户信息失败:', error);
      return null;
    }
  }

  /**
   * 批量获取用户信息
   * @param {Array} userIds 用户ID数组
   * @returns {Promise<Array>} 用户信息数组
   */
  async getBatchUserInfo(userIds) {
    if (!Array.isArray(userIds) || userIds.length === 0) {
      return [];
    }

    const promises = userIds.map(userId => this.getUserInfo(userId));
    const results = await Promise.all(promises);
    
    return results.filter(Boolean);
  }

  /**
   * 清除用户信息缓存
   * @param {string|number} userId 用户ID，不传则清除所有缓存
   */
  clearCache(userId = null) {
    if (userId) {
      this.userCache.delete(userId);
    } else {
      this.userCache.clear();
    }
  }

  /**
   * 获取显示名称（优先使用昵称）
   * @param {Object} userInfo 用户信息
   * @returns {string} 显示名称
   */
  getDisplayName(userInfo) {
    if (!userInfo) return '考友';
    
    return userInfo.nickname || userInfo.realName || userInfo.username || '考友';
  }
}

// 创建单例实例
const userService = new UserService();

module.exports = {
  userService,
  UserService
};
